
#include "logger.h"
#include "threadpool.h"

using namespace std;

//
// rm ./threadpool_test &&  g++ -g *.cpp *.cc -o threadpool_test -lpthread -std=c++14
//

void taskFunc(void)
{
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
}


INITIALIZE_EASYLOGGINGPP;

int main()
{
    {
        // 只需要在 main() 开始时候初始化一次就够, 当然后续根据子集需要  defaultConf.set()  el::Loggers::reconfigureLogger,
        // defaultConf.setGlobally()   el::Loggers::reconfigureLogger(),
        el::Configurations defaultConf;
        defaultConf.set(el::Level::Info, el::ConfigurationType::Format, "%datetime %level %msg");
        defaultConf.setGlobally(el::ConfigurationType::Filename, "log/log_%datetime{%Y%M%d_%H%m%s}.log");
        el::Loggers::reconfigureLogger("default", defaultConf);
    }

   
    // char tmp[32] = {};
    // sprintf(tmp, "%s", __TIMESTAMP__); //linux
    // cout << tmp << endl;

    

    // ThreadPool pool(3, 10);   // 最大10个线程,
    ThreadPool pool(3, 30);         // 最大30个线程,
    for (int i = 0; i < 10000; i++) // 30个线程处理10000个任务, 测试  "======= increase thread  ======="  "======= decrease thread  =======",
    {
        pool.AddTask(std::bind(taskFunc));
    }

    while (1)
    {
        this_thread::sleep_for(chrono::seconds(1)); // 防止主线程退出时候, 线程池正在处理业务, 发送 SIGKILL 信号 ,
    }
    
    return 0;
}
